# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:Yi3_3.py
@Time:2024/8/15 9:26

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""

import random
import streamlit as st
from yi.yi_dict3_0 import key_value
from yi.yi_class1_0 import yi_dict,tuan_dict,xiang_dict


def coin_toss_to_trigram(toss):
    """
    将三枚铜钱的结果转换为卦象（少阳、老阳、少阴、老阴）及其阴阳值
    :param toss: 投掷结果列表，包含三个'H'或'T'
    :return: 卦象字符串, 阴阳值（1为阳，0为阴，但老阳和老阴在后续处理中会有特殊转换）
    """
    #存入元组的写法，H出现了n次，T出现了m次   (n,m)
    counts = toss.count('H'), toss.count('T')
    if counts == (3, 0):#正正正
        return "老阳 ⚊", 1
    elif counts == (2, 1):#正正反
        return "少阴 ⚋", 0
    elif counts == (1, 2):#正反反
        return "少阳 ⚊", 1
    else:
        return "老阴 ⚋", 0#反反反


# 初始化 Streamlit 应用
# st.markdown("<meta charset=''UTF-8>",unsafe_allow_html=True)
def jinqianke():
    st.markdown("## 易经金钱课")
    if st.button(f'### 起卦'):
        # 投掷六次
        results = []
        for _ in range(6):
            # 初始化单次投掷的结果列表, 一次投掷三枚，正反反，正正反，正正正，反反反，不讲顺序，共四种情况，存入列表
            single_throw = ['H' if random.random() < 0.5 else 'T' for _ in range(3)]
            # 转换为卦象
            trigram, value = coin_toss_to_trigram(single_throw)
            # 记录投掷结果和卦象,元组存入列表，三个值，列表，卦象，1或0(阳或阴)
            results.append((single_throw, trigram, value))

        gua=[]
        # 反向打印每次投掷的结果和卦象


        for i, (throw, trigram, value) in reversed(list(enumerate(results, 1))):
            # 设置 HTML 文本颜色
            color = 'red' if '老' in trigram else 'black'  # 老阳和老阴用红色
            html_trigram = f'<span style="color: {color};">{trigram} {value}</span>'

            # 显示结果
            st.markdown(f"##### 投掷{i}: {' '.join(throw)} -> {html_trigram}",unsafe_allow_html=True)
            gua.append(value)

        # st.markdown(f"### 本卦{}")
        gua.reverse()
        # print(gua)

        result = ''.join(map(str,gua))
        # print(result)
        # print(key_value(result))
        ben_gua=key_value(result)

        st.markdown(f"### 本卦:{ben_gua[0]} {ben_gua[1]}")
        #卦爻辞
        for item in yi_dict[ben_gua[0]]:
            st.markdown("###### "+item+"\n")
        st.markdown("***")
        for item in tuan_dict[ben_gua[0]]:
            st.markdown("###### 彖曰: "+item+"\n")
        st.markdown("***")
        for item in xiang_dict[ben_gua[0]]:
            st.markdown("###### 象曰: "+item+"\n")
        st.markdown("***")

        # 转换老阳和老阴的阴阳值（老阳转为0，老阴转为1）
        converted_yin_yang = []
        for _, trigram_str, yin_yang in results:
            if trigram_str == "老阳 ⚊":
                converted_yin_yang.append(0)  # 老阳转为0
            elif trigram_str == "老阴 ⚋":
                converted_yin_yang.append(1)  # 老阴转为1
            else:
                converted_yin_yang.append(yin_yang)  # 其他情况不变


        # 如果需要将这些值作为字符串输出
        result = ''.join(map(str, converted_yin_yang))  # 注意这里使用了[::-1]来反转列表，因为原始是反向处理的
        # print("转换后的阴阳值字符串（从下到上）:")
        # print(result)
        # print(key_value(result))
        bian_gua=key_value(result)
        # 打印转换后的阴阳值

        st.markdown(f"### 变卦:{key_value(result)[0]}  {key_value(result)[1]}")
        for i, value in enumerate(reversed(converted_yin_yang), 1):
            st.markdown(f"##### 第{7-i}爻: {value}")
        for item in yi_dict[bian_gua[0]]:
            st.markdown("###### "+item+"\n")
        st.markdown("***")
        for item in tuan_dict[bian_gua[0]]:
            st.markdown("###### 彖曰: "+item+"\n")
        st.markdown("***")
        for item in xiang_dict[bian_gua[0]]:
            st.markdown("###### 象曰: "+item+"\n")